查看原文
其他

基于HMM-GMM的语音识别算法介绍

李咏泽 58AILab 2023-12-21

语音是58同城用户之间的重要沟通媒介,58同城C端用户和B端用户之间可以通过网络音视频通话、电话建立连接,58同城数千名销售和客服人员会通过呼叫中心与客户进行电话沟通,这些场景下会产生大量的语音数据,这些语音数据可以通过语音识别引擎转换为文本,并做进一步挖掘,以提取有价值的数据。
将介绍经典的GMM-HMM语音识别系统,包括声学模型、语言模型和解码器,并且简要介绍在实际场景中我们应用的chain model系统文章主要内容分为三部分,第一部分概览语音技术以及语音识别,第二部分会深入HMM-GMM语音识别系统的三大模块进行原理方面的讲解,第三部分会简介自研语音识别系统中用到的chain model算法。
一、语音技术及语音识别概览
人发出的声音就是语音,可以看到语音经过介质的传播、拾音装置的记录,最终到计算机中我们能看到的形式便是上面的波形图所示。形式看上去非常简单,但是却蕴含着很多信息。应用声纹识别技术,可以得知说话人的身份信息。应用语种识别,可以得知语种信息。通过语音识别,我们可以得到说话的内容。情感识别,可以得知说话人的情感。假设存在多人说话,通过语音分离,可以得到各个说话源的信息。除此之外,语音技术还有降噪、声源定位等。可以看到语音技术其实是一门交叉学科,涵盖了计算机科学、机器学习、语音语言学、听觉与声学、信号处理等学科。

语音识别(Automatic Speech Recognition)简称为ASR,任务就是将语音转换成文本,解决的是机器的听清问题,同时可以处理部分声学和语言上的混淆,例如:“帮我拿快递”和“帮我拿块地”,成熟的ASR系统需要解决不同说话人之间的差异性。ASR不解决说话人身份问题(声纹识别),也不解决机器的听懂问题(自然语言理解)。

从上图可以看到语音识别的公式表示,在给定声学特征的情况下,找到与之最匹配的文字序列。用贝叶斯公式展开之后,便成为了两部分P(X|W)P(W)P(X|W)就是声学模型部分,P(W)是语言模型部分,寻找最优文字序列便是由解码器驱动的。

二、HMM-GMM语音识别系统

1. 系统总览

HMM-GMM语音识别系统总共包含三个模块:声学模型、语言模型和解码器。声学模型负责计算声学特征和音素状态的匹配度(后验概率),语言模型用来给出词与词之间的语言学概率,解码器是用来统领整个解码过程,输出解码文本。

2. 声征提

对于一段音频,计算声学特征的流程如上图所示,首先经过预加重,提升高频部分能量,然后经过分帧加窗,将一段音频分为多帧再进行离散傅里叶变换,这样我们是对各帧进行频率分析而不是整体音频。进行傅里叶变换之后,还要通过梅尔滤波器的滤波,然后就得到了Fbank声学特征。MFCC特征则需要进一步的离散余弦变换得到。总的来看,一段音频经过处理之后,得到了一系列的向量,便是声学特征序列。

3. 声学模型

3.1 建模单元与HMM-GMM

语音识别的建模单元为音素,音素是发音的基本单元。在系统中使用发音词典,来记录词到音素的映射,如下所示为0-9数字到音素的映射:

在语音识别中,我们使用三状态的HMM模型来对一个音素建模,每个状态的发射概率用GMM(高斯混合模型)来描述:

3.2 单音素与三音素模型

单音素模型是不考虑音素的上下文,对单个音素进行建模。比如对于词“复产”,其对应的音素序列为:f u4 ch an3;对于词“复兴”,其对应的音素序列为:f u4 x ing1。如果使用单音素建模的方式,这两个词中的“u4”这个音素,是用同一个HMM-GMM模型建模的。

三音素模型是指对于一个音素,考虑其所处的上下文,前/后各一个音素,如果上下文音素不同,则即使中间音素相同,也是属于不同的三音素模型。在上面的例子中,“复产”中的“u4”的三音素形式为“f-u4+ch”,表示其左边是“f”音素,右边是“ch”音素。而“复兴”中的“u4”的三音素形式为“f-u4+x”。这两个是不同的三音素模型,因此要用两个不同的HMM-GMM来建模。

单音素建模的缺点是,建模单元数少,以及不符合现实,即实际上一个音素的发音,是会受到其前后音素的影响的。因此实际的语音识别系统最终会采用三音素建模的形式,三音素建模虽然避免了前面说的问题,但同时也产生了新的问题,就是建模单元数会暴涨,例如中文音素总共有200多个,理论上三音素模型数为200的三次方就是八百万个,会有很多三音素模型没有可用的训练数据。

3.3 三音素参数共享

三音素模型带来的问题就是并不是所有的三音素模型都有对应的训练数据可以评估参数,目前采用的办法为决策树绑定。就是利用语言学家构建的问题,来对中间音素相同,上下文不同的音素进行分组,最终分到同一叶子结点的三音素状态,共享同一套GMM参数。如图:

3.4 声学模型训练流程
声学模型训练的具体流程如下图所示,其中红色框的部分是要经过反复的循环迭代,即用模型来对训练数据进行对齐得到训练数据的音素序列,然后再用训练数据的音素序列结合声学特征来更新HMM-GMM的参数。当单音素模型训练好之后,会构建三音素训练所用的决策树,然后继续进行三音素模型训练。

4. 语言模型

4.1 语言模型的统计定义

一个统计语言模型包含有限集合 V,和一个函数 𝑝(𝑥1,𝑥2,…,𝑥𝑛)。那么对于任意𝑥1,𝑥2,…,𝑥𝑛∈𝑣+,模型都可以给出一个概率𝑝 (𝑥1,𝑥2,…,𝑥𝑛)≥0

4.2 统计语言模型的作用

在语音识别中,给定一个词序列,预测出下一个最能出现的词语,或者是出现在此序列后出现某个词的概率。

4.3 N-gram

一般我们会使用3-gram语音模型,即用前两个词作为历史,估计当前词。比如:

P(晴朗|你,知道,今天,天气) = P(晴朗|今天,天气)

5. 解码器

5.1 概述

解码器的作用是,在指定的搜索空间内,搜索所有的文字序列,同时使用声学模型和语言模型来对声学特征序列和文字序列进行声学以及语言上的打分,然后得分最高的序列即是解码所得的文字序列。

5.2 viterbi解码算法示例

上图是viterbi解码算法来做连续数字串识别(仅1和3)的示例,当前的搜索空间便是数字1和3,从初始状态开始,跳到数字1和3的起始音素状态都是有可能的,分别计算第一帧在这两个状态上的概率(由各自的GMM给出),随后逐帧的向后传递,蓝色箭头所示均是可以走的路径,每条路径的概率由状态跳转概率和发射概率(GMM给出)累计计算得出,红色箭头表示的是,当处于结束状态时,下一帧可能走的路径,即词间的跳转,这些跳转会由语言模型给出的概率来累加到路径上。最终,声学特征耗尽之后,会有很多走到结束状态的路径,他们的概率都不相同,通过对概率最大路径的回溯,便可以得到这段音频对应的数字串。

解码器实际的工程实现要用wfst来表示,实际的解码算法也会比上面提到的要有更多的细节,但是主体的思想是一样的。解码算法的工程实现会在以后进行分享。

5.3 WFST解码器

WFST是Weighted Finite-State Transducers,是一种表示形式。我们的声学模型、语音模型、发音词典都可以表示成为WFST的形式。然后使用WFST的合并、最小化等算法,最终形成一张大的解码图。这张解码图的输入为三音素序列(kaldi中为transition-id),输出为词序列。因此整个解码过程都是在这张大的解码图中进行跑分的。在每一步解码时,并不是保留最佳路径,而是同时保留多条优势路径。这里会用到剪枝算法来保留多条优势路径,并去掉打分较低的路径。一般会同时用到两种剪枝算法:histogram pruning和beam pruning,此处不再赘述。

三、chain model简介

1. chain model综述

chain model 是由kaldi的作者Dan Povey提出的,其模型架构为HMM-TDNN。和HMM-GMM不一样的地方是,用神经网络的输出来替代GMM计算声学特征对应于音素的概率(实际上还需要进一步折算)。从训练策略来讲,chain model和前面的训练策略完全不同,是属于区分性训练的一种(discriminative training)。

2. chain model特点

特点之一是使用单状态的HMM,而不是三状态的HMM来对音素建模:

特点之二是由于HMM拓扑结构的改变,对于TDNN网络的输出进行隔三帧采样:

特点之三是区分性训练的策略,区分性训练使用的优化函数更趋近于语音识别的任务衡量指标。并且chain model和普通的区分性训练也是有区别的,是一种Lattice-freeMMI的训练,这里不再展开讲了。

3. chain model训练流程

同样需要进行单音素三音素训练,来对训练文本进行更好的对齐。Chain Prepare的阶段,也是要利用训练数据的对齐文本,Lattice-freeMMI阶段便是TDNN网络的训练阶段。其他语言模型和解码器算法都同之前的一致。


欢迎关注AI Lab微信公众号:58AILab

欢迎加入58 AI Lab技术交流社区

欢迎在欣秀https://app.ic3i.com)平台上加入"58同城AILab技术沙龙"圈子,一起交流技术,可以扫描以下二维码加入该圈子:

欢迎加入58 AI Lab

求后端、算法人才加入,欢迎投递:zhankunlin@58.com,岗位介绍见:58同城AI Lab 社招/校招/实习生 招聘,欢迎加入

团队照片

部门年会

部门团建

部门技术分享

部门篮球赛

欢迎加入58同城!
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存